#ifndef __socketx_H__
#define __socketx_H__
#ifdef __cplusplus
extern "C"{
#endif

#include <sys/types.h>
#include <sys/socket.h>
#include <net/if.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <signal.h>
#include <errno.h>
    
// 加载socket库
int socketx_init();

// 卸载socket库
int socketx_unit();

// 创建一个socket, 失败会返回-1. 此socket是非阻塞的. 如果创建失败
int socketx_create(int iDomain, int iType, int iProtocol);

// 关闭socket
int socketx_close(int sock);

// 绑定socket
int socketx_bind(int sock, const struct sockaddr *name, socklen_t len);

// 监听socket
int socketx_listen(int sock, int iBacklog);

// 服务器连接客户端
int socketx_accept(int sock, struct sockaddr *pAddr, socklen_t *pLen);

// 客户端连接服务器, 失败会返回-1. iTimeOut是连接等待时间, 以为千分之一秒为单位，为0则立即返回
int socketx_connect(int sock, const struct sockaddr* pServAddr, socklen_t len, int iTimeOut);

// 发送数据, 注意linux与windows中的接口差异
int socketx_send(int sock, const void* pBuf, int iLen, int iFlags);

// 接收数据, 注意linux与windows中的接口差异
int socketx_recv(int sock, void* pBuf, int iLen, int iFlags);

#ifdef __cplusplus
}
#endif
#endif
